package cn.aku.d4_set;

import java.util.HashSet;
import java.util.Set;
/*
 if (p.hash == hash &&
((k = p.key) == key || (key != null && key.equals(k))))
 */
public class Test_HashSet2 {
    public static void main(String[] args) {
        //创建Set集合对象
        Set<Student> set=new HashSet<>();

        //创建自定义对象
        Student s1 = new Student("Mike", 55, "印度");
        Student s2 = new Student("Bob", 55, "新加坡");
        Student s3 = new Student("Jack", 55, "英国");

        Student s4 = new Student("Bob", 55, "新加坡");
        Student s5 = new Student("Jack", 55, "英国");

        System.out.println(s2.hashCode());
        System.out.println(s4.hashCode());

        //将对象放入set集合
        set.add(s1);
        set.add(s2);
        set.add(s3);
        set.add(s4);
        set.add(s5);
        System.out.println(set);
        /*
        总结：
        重复的给set集合中添加了属性相同的对象，为什么没有像之前那样去重？
        1.保证对象有相同的哈希码值
        源码：-底层默认使用Object提供的hashCode()来计算哈希码值
        ，每次new对象,哈希码值不同
        解决方案：
        重写hashCode()---两个对象类型与属性值相同，生成一样的哈希码值
        2.保证两个对象的equals()返回true
        --底层默认使用Object提供的逻辑==进行值比较
        地址值相同才返回true，所以要重写equals()

         */



    }
}
